// 只有函数返回值参与计算时才会自动调用toString方法，add(1)(2)(3)(4)+'' 
// 注意传入的参数都是展开式的 ...
function curry(fn,...args){
    function curried(){
      console.log(...args,'args');
       let allArgs=[...args,...arguments]
       return curry(fn,...allArgs)//只要没调用 这里就会一直保存参数 ...args=...allArgs,调用curried的时候，...args就是curry里的...args,因为curried的里面有curry的参数，所以暂时不垃圾回收
   }
   curried.toString=function(){
     
      return fn(...args)
   }
   return curried
}
const dynamicAdd=function(){
  let sum= [...arguments].reduce((a,b)=>a+b,0)
  return sum
}
let add=curry(dynamicAdd,1)
let s=add(2)(8)+''//为了触发tostring方法
// let r=add(2)(3,4,5)(1)+''
// console.log(r,'--r');
console.log(add,'---add');
console.log(s,'---s');